package com.example.yin.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.example.yin.common.R;
import com.example.yin.mapper.CollectMapper;
import com.example.yin.model.domain.Collect;
import com.example.yin.model.request.CollectRequest;
import com.example.yin.service.CollectService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class CollectServiceImpl extends ServiceImpl<CollectMapper, Collect> implements CollectService {
    @Autowired
    private CollectMapper collectMapper;

    @Override
    public R addCollection(CollectRequest addCollectRequest) {
        Collect collect = new Collect();
        BeanUtils.copyProperties(addCollectRequest, collect);
        // 执行数据库插入操作，并判断是否插入成功
        if (collectMapper.insert(collect) > 0) {
            // 如果插入成功，则返回收藏成功的响应，其中第二个参数表示收藏状态为true
            return R.success("收藏成功", true);
        } else if ((boolean) existSongId(addCollectRequest).getData()) {
            return R.success("已收藏于该收藏夹", false);
        } else {
            return R.error("收藏失败");
        }
    }

//    该方法根据给定的歌曲ID和用户ID，在数据库中查询是否已存在对应的收藏记录。如果存在，则返回已收藏的响应；否则返回未收藏的响应。
    @Override
    public R existSongId(CollectRequest isCollectRequest) {
        QueryWrapper<Collect> queryWrapper = new QueryWrapper();
        queryWrapper.eq("user_id", isCollectRequest.getUserId());
        queryWrapper.eq("song_id", isCollectRequest.getSongId());
        queryWrapper.eq("num", isCollectRequest.getNum());
        // 执行数据库查询操作，并判断是否存在匹配的记录
        if (collectMapper.selectCount(queryWrapper) > 0) {
            // 如果存在匹配的记录，则返回已收藏的响应
            return R.success("已收藏于该收藏夹", true);
        } else {
            return R.success("未收藏", false);
        }
    }

//    该方法根据给定的用户ID和歌曲ID，在数据库中删除对应的收藏记录。如果删除成功，则返回取消收藏的响应；否则返回取消收藏失败的响应。
    @Override
    public R deleteCollect(Integer userId, Integer songId, Integer num) {
        QueryWrapper<Collect> queryWrapper = new QueryWrapper();
        // 设置查询条件，根据用户ID，歌曲ID和收藏夹序号进行查询
        queryWrapper.eq("user_id", userId);
        queryWrapper.eq("song_id", songId);
        queryWrapper.eq("num", num);
        // 执行数据库删除操作，并判断是否删除成功
        if (collectMapper.delete(queryWrapper) > 0) {
            // 如果删除成功，则返回取消收藏的成功响应
            return R.success("取消收藏", false);
        } else {
            // 如果删除失败，则返回取消收藏失败的错误响应
            return R.error("取消收藏失败");
        }
    }

//    该方法根据给定的用户ID，在数据库中查询该用户的收藏列表。将查询结果封装到响应中并返回。
    @Override
    public R collectionOfUser(Integer userId, Integer num) {
        QueryWrapper<Collect> queryWrapper = new QueryWrapper();
        queryWrapper.eq("user_id", userId);
        queryWrapper.eq("num", num);
        return R.success("用户收藏", collectMapper.selectList(queryWrapper));
    }

    @Override
    public R collectionCountOfUser(Integer userId) {
        QueryWrapper<Collect> queryWrapper = new QueryWrapper();
        queryWrapper.eq("user_id", userId);
        return R.success("获取成功", collectMapper.selectList(queryWrapper).size());
    }
}
